home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 3 / CD ACTUAL 3.iso / linux / system / flicb_1.6 / flicb_1 / flicb / flicb-io.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-11  |  2.2 KB  |  91 lines

  1. /* Fairlight's ICB Client                                                    */
  2. /* Copyright 1994, Mark Luljak <fairlite@arcadia.aldridge.sol.net>           */
  3. /*                                                                           */
  4.  
  5.  
  6. #include "flicb.h"
  7.  
  8. /* Function:  connecticb()                      */
  9. /* Arguments: none                              */
  10. /* Purpose:  call clientsock() to open a port   */
  11.  
  12. int connecticb()
  13. {
  14.      int s;
  15.  
  16.      if ((s = clientsock(SERVERNAME, ICBPORT)) < 0) {
  17.           printf("Unable to connect to server.\n");
  18.           exit(1);
  19.      }
  20.      fcntl(s,F_SETFL,O_NDELAY);
  21.      return(s);
  22. }
  23.  
  24.  
  25.  
  26. /* Function:  login()                           */
  27. /* Arguments: s        : socket descriptor      */
  28. /*            logname  : login name to send     */
  29. /*            nickname : nickname to send       */
  30. /*            groupname: group name to send     */
  31. /* Purpose:   Send a login packet to the server */
  32.  
  33. /* Packet format:  alogname^Anickname^Agroupname^A^A   */
  34.  
  35. void login(s, logname, nickname, groupname)
  36. int s;
  37. char *logname, *nickname, *groupname;
  38. {
  39.      char wholestring[STRINGSIZE];
  40.      char pkt[STRINGSIZE];
  41.      char a;
  42.      
  43.      sprintf(wholestring,"a%s%s%s%s%s%s%s",logname,SEPCHR,nickname,SEPCHR,
  44.              groupname,SEPCHR,SEPCHR);     /* Concatenate packet    */
  45.      a=(char)strlen(wholestring);          /* Get length of packet  */
  46.      sprintf(pkt,"%c%s",a,wholestring);    /* Tack it onto string   */
  47.      send(s,pkt,strlen(pkt),0);            /* Send it out on socket */
  48.      return;
  49. }
  50.  
  51.  
  52.  
  53.  
  54. int packet_write(socket, packet)
  55. int socket;
  56. char *packet;
  57. {
  58.     char *ptr;
  59.     int rval;
  60.     unsigned char tosend;
  61.  
  62.     tosend = (char)strlen(packet)+1;
  63.     ptr = packet;
  64.     while ((rval = send(socket, &tosend, sizeof(unsigned char), 0)) < 0) {
  65.     if (errno != EWOULDBLOCK) {
  66.         perror("packet_write");
  67.         return(-1);
  68.     }
  69.     }
  70.     if (! rval) {
  71.     return(-2);
  72.     }
  73.     while (tosend) {
  74.         if ((rval = send(socket, ptr, tosend - (ptr - packet), 0)) < 0) {
  75.         if (errno != EWOULDBLOCK) {
  76.             perror("packet_write");
  77.             return(-1);
  78.         }
  79.     } else {
  80.         if (! rval) {
  81.         return(-2);
  82.         } else {
  83.         tosend -= rval;
  84.             ptr += rval;
  85.         }
  86.     }
  87.     }
  88.     return(0);
  89. }
  90.  
  91.